jQuery.extend(jQuery.expr[':'], {
  	shown: function (el, index, selector) {
    	return $(el).css('visibility') != 'hidden' && $(el).css('display') != 'none' && !$(el).is(':hidden')
  	}
});

$(document).ready(function () {

	var _inputValue='';	
	
	$('table[data-editable="true"] tbody').on('click', 'td.editable', function (e) {

		if ( this.childNodes.length>0 ) {
			if ( this.childNodes[0].nodeType!=3 ) {
				return false;
			}
		}

		if ( this===e.target && $(this).attr('data-edit-status')=='inited' ) {
			return false;
		}

		if ( $(this).attr('data-edit-status')=='init' ) {
			return false;
		}
		if ( $(this).attr('data-edit-status')=='ing' ) {
			return false;
		}

		_inputValue=$(this).text();	    	
		this.innerHTML='<td><input class="editable" value="'+_inputValue+'" /></td>';
		$(this).attr('data-edit-status','init');
		$('input',this).trigger('focus');
		$('input',this).val( $('input',this).val() );
	});

	$(document).on('keyup', 'td[data-edit-status="init"] input.editable', function () {
		if ( $(this).val()!=_inputValue ) {
			$(this).parent().attr('data-edit-status','ing')
		}
	});

	$(document).on('blur', 'td[data-edit-status="init"] input.editable', function (e) {
		// console.log('input'+e.target)
		$(this).parent().html( $(this).val() );
		$('td[data-edit-status="init"]').attr('data-edit-status','inited')
		//prevent td event call
		setTimeout(function(){
			$('td[data-edit-status="inited"]').attr('data-edit-status','');
		},1000)
	});

	$(document).on('blur', 'td[data-edit-status="ing"] input.editable', function () {
		// var _id=$(this).closest('tr').find('input.data-id').val();
		// var _key=$(this).closest('table').find('thead th').eq( $(this).parent().index() ).text();
		// var _value=$(this).val();
		$(this).parent().html( $(this).val() );
		$('td[data-edit-status="ing"]').attr('data-edit-status','ed')
		// editedRow.push( _id, _key, _value )
		// console.log(editedRow)
		//var _elem=$('<td>'+$(this).val()+'</td>');
		//this.parentNode.innerHTML=_elem.html();
		// console.log( $(this).val() )
	});

	$('table[data-editable="true"] tbody').on('change', 'span.editable select[data-name]', function (e) {
		// console.log( $(this).val() )
	});

	$('table[data-editable="true"] tbody').on('blur', 'span.editable input[data-for]', function (e) {
		// console.log( $(this).val() )
	});

	$.fn.getTableEdited =function (tableId){

		var tableId=this;

		var saved=[];

		$('tbody',tableId).children('tr').each(function(){

				var editedRow=[];

				editedRow.push( 'id', $(this).find('input.data-id').val() )				
				$(this).children('td.editable[data-edit-status="ed"]').each(function(index){
					
					editedRow.push( $(this).closest('table').find('thead th').eq( $(this).index() ).attr('data-key') , $(this).text() );

				})
				$(this).find('td.selectable[data-edit-status="ed"] span.data-visible:shown').each(function(index){

					if ( $(this).children('input[data-for]').size()==0 ) {
						editedRow.push( $(this).closest('table').find('thead th').eq( $(this).closest('td').index() ).attr('data-key') , $(this).children('select[data-name]').val() );
					}else {
						editedRow.push( $(this).closest('table').find('thead th').eq( $(this).closest('td').index() ).attr('data-key') , $(this).children('select[data-name]').val() , $(this).children('input[data-for]').val() );
					}

				})
				saved.push( editedRow )
			
		});

		var i=saved.length;
		while (i--) {
			if ( saved[i].length==2 ) {
				saved.splice( i,1 );
				//console.log( saved[i] )
			}
		}
		console.log( JSON.stringify(saved) )
		return JSON.stringify(saved);
	}

});